home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / rsxwdk2s.zip / RSXWDK / LIBSRC / WIN / RSXW32.C < prev    next >
C/C++ Source or Header  |  1994-12-20  |  2KB  |  91 lines

  1. #define NOGDI
  2. #define NOUSER
  3. #define NOKERNEL
  4. #include <windows.H>
  5. #include <sys/rsxw32.h>
  6. #include <sys/sv_call.h>
  7.  
  8. /* callback function from syscalls.s */
  9. extern int wnd_dlg_proc32(void);    /* callback for Windows and Dialogs */
  10. extern int callb32_argc5(void);     /* callback for 5 args */
  11. extern int callb32_argc4(void);     /* callback for 4 args */
  12. extern int callb32_argc3(void);     /* callback for 3 args */
  13. extern int callb32_argc2(void);     /* callback for 2 args */
  14.  
  15. /* globals */
  16. ULONG        _rsxw32_callback;
  17. ULONG        _rsxw32_ds;
  18. struct {
  19.     ULONG eip;
  20.     ULONG cs;
  21. }        _rsxw32_entry;
  22.  
  23. ULONG _sys_heap_begin;
  24. ULONG _sys_heap_end;
  25. ULONG _sys_base_addr;
  26. ULONG _sys_last_addr;
  27. ULONG _sys_first_sel;
  28.  
  29. static PrgInfoBlock prg_info_block;
  30.  
  31. void get_classes_data(ULONG *class_off, ULONG *bytes, ULONG *index);
  32.  
  33. void rsxw32_init(void)
  34. {
  35.     static inited = 0;
  36.  
  37.     if (inited)
  38.     return;
  39.     inited = 1;
  40.  
  41.     prg_info_block.WinProc32 = (ULONG) wnd_dlg_proc32;
  42.     prg_info_block.callback_argc5 = (ULONG) callb32_argc5;
  43.     prg_info_block.callback_argc4 = (ULONG) callb32_argc4;
  44.     prg_info_block.callback_argc3 = (ULONG) callb32_argc3;
  45.     prg_info_block.callback_argc2 = (ULONG) callb32_argc2;
  46.  
  47.     SV_CALL(M_WINMAIN_INIT, (ULONG) &prg_info_block);
  48.  
  49.     _rsxw32_callback = prg_info_block.WinProc16;
  50.     _rsxw32_ds = prg_info_block.extender_ds;
  51.     _rsxw32_entry.cs = prg_info_block.rsxw32_cs;
  52.     _rsxw32_entry.eip = prg_info_block.rsxw32_eip;
  53.     _sys_heap_begin = prg_info_block.heap_begin;
  54.     _sys_heap_end = prg_info_block.heap_end;
  55.     _sys_base_addr = prg_info_block.user_base_addr;
  56.     _sys_last_addr = prg_info_block.user_prg_end;
  57.     _sys_first_sel = prg_info_block.user_first_sel;
  58.  
  59.     _sys_init_selectors();
  60. }
  61.  
  62. void rsxw32_uninit(void)
  63. {
  64.     static uninited = 0;
  65.  
  66.     if (uninited)
  67.     return;
  68.     uninited = 1;
  69.  
  70.     _sys_free_selectors();
  71. }
  72.  
  73. int        __argc;
  74. char **     __argv;
  75. char **     __env;
  76.  
  77. int main(int argc,char **argv,char **env)
  78. {
  79.     rsxw32_init();    /* uninit at __exit() */
  80.  
  81.     __argc = argc;
  82.     __argv = argv;
  83.     __env = env;
  84.  
  85.     return  WinMain(
  86.         prg_info_block.hInst,
  87.         prg_info_block.hPrevInst,
  88.         prg_info_block.lpCmdLine,
  89.         prg_info_block.nCmdShow);
  90. }
  91.